















题    目： 单片机最小远程监控系统的设计与开发 
姓    名：             焦义华                 
学    号：          200905070041              
系    别：        物理与电子工程系            
专    业：             自动化                 
年级班级：           2009级(1)班              
指导教师：             刘  琪                 


2013年5月18日







 
毕业论文（设计）作者声明

本人郑重声明：所呈交的毕业论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外，本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
本人完全了解有关保障、使用毕业论文的规定，同意学校保留并向有关毕业论文管理机构送交论文的复印件和电子版。同意省级优秀毕业论文评选机构将本毕业论文通过影印、缩印、扫描等方式进行保存、摘编或汇编；同意本论文被编入有关数据库进行检索和查阅。
本毕业论文内容不涉及国家机密。

论文题目：单片机最小远程监控系统的设计与开发
作者单位：物理与电子工程系
作者签名：              （学号：200905070041） 

                            年  月  日




 
目    录

摘要	1
引言	1
1.系统总体设计方案	2
1.1 课题背景与研究意义	2
1.2 系统设计要求	3
1.3 系统设计方案	4
1.4 设计的主要工作与需要解决的问题	5
2.系统硬件设计	7
2.1 系统元器件选型及参数介绍	7
2.2 系统电路的硬件设计	12
2.3 系统硬件电路的绘制与PCB线路板制作	16
3.系统软件设计	17
3.1系统软件编程环境介绍	17
3.2系统软件实现功能要求	18
3.3系统主程序流程图	18
3.4系统温度采集的实现	19
4.系统的制作、安装与调试	22
4.1主、从机电路的绘制与PCB板的制作	22
4.2元件的认识、安装与焊接	23
4.3系统的调试	25
4.4系统的测试及功能验证	27
5.总结	28
参考文献	28
附录	30
致谢	35
 
 
单片机最小远程监控系统的设计与开发
摘  要：单片机最小系统是以单片机为基础搭配最少元件的可以满足一定工作要求的系统。本文利用单片机最小系统和传感器技术，设计了基于AT89S52单片机、nRF24L01无线传输模块和温度传感器DS18B20的远程监控系统；本文采用数字温度传感器DS18B20采集环境温度，利用无线模块nRF24L01进行数据的传输，传送给主机；本文用液晶屏LCD1602显示温度数据，通过按键可以1℃的步进改变温度设定值，设置温度的上下限。当温度低于设定的下限温度或者高于设定的上限温度时蜂鸣器发声和LED发光报警。经过仿真调试，本设计最终在硬件平台上实现了对环境参数的无线监测及控制。
关键词：最小系统；远程监控；温度传感器

The Minimum Single-chip Design and Development of Remote Monitoring System
Abstract: The minimum remote monitoring system means that the microcontroller can work well with the minimum of components consisting. This paper that makes use of the minimum system of microcontroller and sensor technology designs remote monitoring system which is based on AT89S52, wireless transmission module nRF24L01 and temperature sensor DS18B20. Device that makes use of digital temperature sensor DS18B20 collects the temperature of circumstances, and transmits to the main frame by nRF24L01. The main frame shows the figure through LCD1602, and change the set value of temperature by 1℃ via key to set the bound. When the actual temperature value is lower than the lower limit or higher than the upper limit, buzzer sounds with LED flashes. After debugging, the designing finally achieve collecting and controlling the temperature of circumstances by wireless on hardware platform.
Key words: Minimum System; Remote Monitoring; Temperature Sensor
引言
微电子技术、自动控制技术与计算机技术的发展将人类社会带入了信息时代，各种电子控制系统应用于生活的每一个角落。其中温度的测量与控制已经渗透到了工农业生产及人们的日常生活中，工业上锅炉加热、水温控制、烤炉温度控制等诸多场合对温度的测量与控制要求越来越多。农业上仓库温度监控、花房温度检测、孵化室温度控制等方面对温度的控制及检测的要求已经从有线的检测发展到无线的远程温度测量及控制[1,2]。因此，如何很好的实现温度的远程测量及控制是摆在科技工作者面前亟待解决的问题。
随着越来越来越多种类传感器的出现和价格的逐步降低，以及传感技术的应用逐渐成熟，其应用领域越来越广泛。由于传感器能将各种物理量，如温度、湿度、压力、气体等转变为可被微处理器识别的电信号，微处理器就能对这些相应的物理量进行相应的判断和处理，因此，需要熟练掌握传感器的结构、原理及其性能指标，以及外围电路设计及其与微处理器间的数据传输。当前的传感器主要用数字输出型的和模拟输出型的，对于数字输出型传感器要很好的把握其数据处理时的时序问题，而对于模拟型的传感器则不能直接和微处理器进行数据的传输，AD转换器是其实现与微处理器通信的桥梁，如何选择AD转换器及信号的不失真传输是该类传感器应用的一个瓶颈。当前传感器的被测信号来自于各个应用领域，在诸多领域中温度传感器是其中重要的一类传感器。温度传感器发展迅速，应用范围越来越广，其技术革新及成本节俭同样是技术工作者不断攻克的难题[3]。
无线传输作为近几年一个应用热点，在工业控制领域无线的应用极大的节约了成本，降低了布线的难度，同时也降低了人工测控的麻烦，极大的提高了生产及管理的效率，2.4GHz无线传输模块nRF24L01，以其集成度高、抗稳定性强、传输距离远在工业控制中得到了广泛的应用[4]。
综合各个方面，本文利用单片机、温度传感器和无线模块，将传感器技术与无线通信技术相结合，设计了最小无线远程温度监控系统。系统包括数据采集模块，无线传输，单片机控制模块，显示模块和温度设置模块，驱动电路五个部分。本设计结构简单、工作可靠、价格低廉，控制灵活，应用性比较强。
1. 系统总体设计方案
1.1 课题背景与研究意义
随着科技的发展及生活水平的提高，人们对环境参数的要求也越来越高，温度做为环境参数的一个重要因素，从人们对生活环境的要求，家用空调、电冰箱、烤箱等温度参数的控制极大的影响着人们的生活环境，正是有了这些温度测量及控制设备，人们的生活水平才能得到逐步的提高；从工农业生产来看，现代温室大棚、粮仓、工业恒温控制箱等对温度参数的要求也越来越高，因此对温度的精确测量及温度的精确控制是使得工农业生产顺利进行的首要条件。在工业生产过程中为了高效地进行生产，简单的温度测量已经不能满足日益高效的生产节奏，随着科技的进步，智能控制已经得到了广泛的应用，如何把温度的测量与智能控制相结合已经成为大家关注的焦点[6,7]。
现代工艺为了降低日益提高的劳动力成本，对智能控制的要求越来越高。本文利用如何完成温度的测量与智能控制相结合作为中心思想，采用集成温度传感器与单片微处理器像结合实现温度的测量与控制，由于单片微处理器的性能日益提高、价格又不断降低，使其性能价格比的优势非常明显[8]。
本课题采用数字温度传感器DS18B20采集温度，通过2.4G无线收发模块nRF24L01实现数据的无线传输，51单片机来对温度数据进行处理显示并自动控制报警及降温装置。采用此方案设计不仅具有控制方便、组态简单和灵活性大等优点，而且可以大幅度提高被控温度的技术指标。
1.2 系统设计要求
一、基本要求
设计并制作一款基于单片机的无线远程监控系统。
二、具体要求
设计并制作一个基于单片机的无线温度远程监控系统，能够对约30米范围内的温度进行无线采集、传输、显示、超限报警及智能控制功能。当温度低于设定的最低温或者高于设定的最高温度范围时主机系统通过蜂鸣器和LED进行声光报警，从机在温度超限时能够自动打开降温装置进行降温，系统报警上下限范围可通过人工按键设定。
主机声光报警：
a. 蜂鸣器（超出温度上下限就报警）
b. 发光二极管（红绿两色）一个上限(红色)； 一个下限（绿色）
c. 温度检测范围 -55度到+125度
4个键位控制：
1号键位用来控制音乐报警提示功能的开与闭；
2号键位切换温度上限和下限；
3号键位实现温度范围增加调节；
4号键位实现温度范围降低调节；
从机：
数字温度传感器DS18B20实现温度的采集，数据通过无线收发模块nRF24L01发送到主机，同时从机单片机对数据进行处理判断采集到的温度值是否超出设定的上限，如果超出温度设定的上限值系统自动打开风扇实现自动降温[9]。
1.3 系统设计方案
1.3.1 系统设计方案论证
结合所学知识，通过查找资料和论证，可通过以下方案来实现课题要求实现的指标，各方案介绍如下所述。
方案一：采用模拟电路与数字电路相结合的模式。温度传感器采用模拟型输出AD590实现对环境温度的采集。AD590采集到的数据通过ＡＤ转换芯片进行模拟量与数字量的转换[10]。单片机对AD转换后的数字信号进行处理判断，采用此方案设计的优点在于检测温度范围广，但可靠性及响应速度比较低、灵活性小、线路复杂设计成本较高、调试、安装都不方便。
方案二：采用FPFGA设计实现，采用FPGA通过VHDL语言编程调试。FPGA具备普通数字电路不具备的强大内核，FPGA集成了程序存储器、静态RAM、AD转换为一体极大的简化了系统外围电路的设计[11]。采用FPGA设计程序调试相对简单，外围电路设计相对较少，不足之处设计成本较高，开发环境相对复杂。
方案三：采用单片集成电路AT89S52结合数字型温度传感器DS18B20设计实现；无线数据传输部分通过2.4G无线收发模块nRF24L01传输。AT89S52及其外围电路实现数据的处理及输出的控制，温度传感器DS18B20采集温度参数并通过无线传输模块发往主机，主机通过LCD1602液晶显示温度值，主从机可在30米范围内完成数据接收[12-14]。
采用此方案设计成本低，开发环境容易，克服了方案一、二的可靠性差、成本高等缺点，所以本课题最终采用方案三实现温度的无线远程监控。
1.3.2 系统设计方案硬件实现框图
系统主要由主、从机两部分组成，从机主要完成温度的采集及无线发送；主机接收从机发来的信号，通过单片机进行处理，然后送到显示器显示，并完成超温报警功能。从机部分使用温度传感器DS18B20进行温度的采集，单片机对温度传感器采集的温度进行处理，再通过无线模块nRF24L01将处理后的数据发送到主机；主机部分由无线模块将接收到的信号传送到主机的单片机，然后通过液晶显示器LCD1602将温度显示出来，在主机部分通过按键可以完成对温度上下限的设置，当温度超过设置的上下限时蜂鸣器和LED能够同时或者单独进行报警，从而从机打开温度调控装置完成对温度的自动调控。系统整体实现框图如图1、2所示。
 图1 系统从机硬件实现框图
1.4 设计的主要工作与需要解决的问题
1.4.1 温度的采集
温度采集采用的是DS18B20温度传感器。数字温度传感DS18B20，可直接将温度信号转换成数字信号，无需经过A/D转换器、ADC采样、量化、编码的过程，极大地简化了硬件电路和软件程序的设计[15]。
描述该DS18B20的数字温度计提供9至12位。信息被发送到DS18B20或者从DS18B20发出通过1线接口，所以中央微处理器与DS18B20只有一个一条口线连接。因为读写以及温度转换可以从数据线本身获得能量，所以不需要外接电源。 因为每一个DS18B20的包含一个独特的序号，多个DS18B20可以同时存在于一条总线。这使得温度传感器放置在许多不同的地方。DS18B20测量的温度范围从-55℃到+125℃，可在1s（典型值）内把温度转换成数字[16]。
 
图2 系统主机硬件实现框图
1.4.2 采集数据的传输
数据采集发送部分上电后首先配置nRF24L01的相关寄存器，使其工作在发射状态，然后复位DS18B20，向DS18B20发送温度转换命令，读取已转换的温度值，然后由nRF24L01发送。
nRF24L01是一款新型单片射频收发器件，工作于2.4～2.5GHz ISM频段。无线收发器包括：频率发生器、晶体振荡器、调制解调器、功率放大器，并融合了增强型Shock Burst技术，输出功率、频道选择和协议的设置可以通过SPI接口进行设置。nRF24L01功耗低，当工作在发射模式下发射功率为-6dBm时电流消耗为9mA，工作电流也只有9mA，接收模式电流为12.3mA。待机模式和掉电模式下电流消耗更低。nRF24L01支持多点间通信，最高传输速率达2Mbit/s。嵌入的链路层控制减少了MCU的复杂性和成本，并且提高了数据传输的可靠性，它采用SOC方法设计只需少量外围元件便可组成射频收发[17]。
本次设计符型液晶显示器LCD1602进行数据的显示，液晶显示稳定无闪烁而且价格低廉节约开发成本。报警部分采用LED和压电式蜂鸣器可以实现声光报警。
1.4.3 采集数据处理及显示
主机nRF24L01收到采集到的数据后通过单片机AT89S52传输到液晶屏幕上显示同时实现对温度数据的判断，当温度超限时打开报警提示。系统对温度的控制采用电磁继电器驱动风扇和电热丝的工作方式实现。当温度低于设定温度时，使用电热丝进行升温并采用蜂鸣器报警,直到温度达到设定温度范围;当温度高于设定温度时，使用换气扇进行降温并采用蜂鸣器报警,直到温度达到设定温度范围，在实际设计过程中考虑到电热丝市场很难买到，实际的设计采用LED来模拟此功能。
2. 系统硬件设计
2.1 系统元器件选型及参数介绍
2.1.1 系统单片机的选型与介绍
本设计采用ATMEL公司的AT89S52单片机作为控制系统的核心。AT89S52是一种低功耗、高性能的CMOS8位微控制器，具有8K在系统可编程Flash存储器，与工业89C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程，亦适于常规编程器。使得AT89S52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。
相对于89C51和89S51，89S52多了对P1口的第二定义和一个16位的计数/定时器T2。AT89S52单片机有一个全双工的串行口，可作为通用异步接收和发送器（UART）用，也可作同步移位寄存器用。AT89S52串行口主要由发送控制器、两个物理上独立的串行数据缓冲寄存器SBUF、输入移位寄存器、接收控制器和输出控制门组成，发送缓冲器SBUF，只能写；接收缓冲器SBUF，只能读。两个缓冲器共用一个地址99H，可以用读/写指令区分。在引脚上，AT89S52单片机通过引脚RXD(P3.0)和引脚TXD(P3.1)与外界进行通信[18]。AT89S52单片机引脚图如图3所示。
AT89S52芯片具有以下特性：
（1）指令集和芯片引脚与Intel公司的8051兼容；
（2）32 个双向I/O口； 
（3）三个16位定时器/计数器；
（4）掉电后中断可唤醒；
（5）看门狗（WDT）电路 
（6）灵活的ISP分页以及字节编程； 
（7）8K字节在系统可编程Flash存储器；
（8）4.5-5.5V工作电压； 
（9）全静态操作：0Hz-33MHz；
（10）低功耗空闲和掉电模式；
（11）双数据指针。
 
图3 AT89S52单片机引脚图
2.1.2 系统温度传感器的选型与介绍
早期常见的温度控制系统多数是模拟电路设计，主要是使用热敏电阻或使用铂电阻，或使用热电偶等，其温度控制的准确度和精确度都不太好。如今，数字技术高速发展，早先的温度控制系统也被基于数字技术的新一代产品所替代。其中温度传感器DS18B20应用非常广泛，它在测温精度、转换时间、传输距离、分辨率等方面有很大的改进。而随着高性能和低成本的单片机的不断发展，新式无线温度控制系统的应用也越来越广泛，它的功能强大，体积小，重量轻，灵活耐用，备受大家青睐。
 
图4 DS18B20引脚分布图
因此，本系统选用的是美国DALLAS半导体公司生产的DS18B20温度传感器。选用该传感器的原因有：①DS18B20与微处理器仅需要一条线即可实现双向通讯，简化连接难度；②无需其他的AD转化器件，降低成本，也减少了硬件制板的费用；③可供使用电压范围大：3.0V到5.5V都可以使用，器件的功耗较低；④测温分辨率高，最高可达0.125度，便于温度精确控制。DS18B20的管脚排列如图4所示。
DS18B20高速暂存器共9个存存单元，如表1所示。
表1 DS18B20高速暂存器
字节地址	寄存器内容	字节地址	寄存器内容
0	LS Byte	4、	配置寄存器
1	MS Byte	5、6、7	保留
2	TH	8	CRC校验值
3	HL		
DS18B20有六条控制命令，如表2所示。
表2 DS18B20控制命令
指 令	约定代码	功 能
读ROM	33H	读DS1820温度传感器ROM中的编码（即64位地址）
符合ROM	55H	发出此命令之后，接着发出64位ROM编码，访问单总线上与该编码相对应的DS1820使之作出响应，为下一步对该 DS1820 的读写作准备。
搜索ROM	0FOH	用于确定挂接在同一总线上DS1820的个数和识别 64 位 ROM 地址。为操作各器件作好准备。
跳过ROM	0CCH	忽略 64 位 ROM 地址，直接向DS1820发温度变换命令。适用于单片工作。
告警搜索命令	0ECH	执行后只有温度超过设定值上限或下限的片子才做出响应。
温度变换	44H	启动DS1820进行温度转换，12位转换时最长为750ms（9位为93.75ms）。结果存入内部9字节RAM中。
读暂存器	0BEH	读内部RAM中9字节的内容
写暂存器	4EH	发出向内部RAM的3、4字节写上、下限温度数据命令，紧跟该命令之后，是传送两字节的数据。
复制暂存器	48H	将RAM中第3 、4字节的内容复制到EEPROM中。
重调 EEPROM	0B8H	将EEPROM中内容恢复到RAM中的第3 、4字节。
读供电方式	0B4H	读DS1820的供电模式。寄生供电时DS1820发送“ 0 ”，外接电源供电 DS1820发送“ 1 ”。

当系统发布温度转换命令后，高速暂存存储器的第0和1字节存放经转换所得的温度的二字节补码形式。该数据可通过单线接口被单片机读到，读取时前面是低位，后面的是高位，数据格式如表1所示。当符号位S=0时，直接进行二进制位和十进制的转换；当S=1时，补码先变成原码，然后再进行十进制值的计算[20]。
DS18B20的工作流程是：首先对DS18B20进行初始化，然后对ROM进行读写操作。如主机控制DS18B20完成温度转换这一过程，根据DS18B20的通讯协议，须经三个步骤：每一次读写之前都要对DS18B20进行复位，复位成功后发送一条ROM指令，最后发送RAM指令，这样才能对DS18B20进行预定的操作。
2.1.3 系统无线收发模块的选型与介绍
根据远程监控要求，本设计需采用无线的传输方式。选择何种传输方式就成了一项重要的工作。对此系统，无线传输必须要做到快速和准确，除此之外，还必须有一定的传输距离。经过多次的对比与选择，选择了一种无线收发模块nRF24L01。
nRF24L01有4种工作模式：分别是Power Down Mode，Standby Modes，RX Mode和TX Mode；控制芯片工作的信号引脚有6 个：CE，CSN，SCK，MOSI，MISO，IRQ。当单片机不和nRF24L01进行SPI通信的时候，单片机要让CSN引脚置为高电平1；进行SPI通信的时候，nRF24L01作为SPI的从设备，单片机作为SPI通信的主设备，通信总是从单片机控制CSN引脚的电位（由1 变为0）开始。然后，单片机通过MOSI给出的SPI命令处理信息，如果还有数据则可以跟上数据，最后以CSN变为1为标志结束本次SPI通信。当然如果通过MOSI给出的SPI命令是读取命令，则nRF24L01的应答从MISO引脚返回（当然每次有SPI命令时，nRF24L01都会把当前自己的状态同步通过MISO 告诉单片机）。此外，CE引脚应该在什么时候置0，什么时候置1很关键。当送给单片机的提醒信号满足3个条件中的某一个时，会把IRQ置0，这个IRQ信号需要单片机在执行完对应的操作后，使用SPI命令让nRF24L01重新置1[21]。
nRF24L01无线模块的主要特性：
(1) 小体积，QFN20 4x4mm封装；
(2) 宽电压工作范围：1.9V~3.6V，输入引脚可承受5V电压输入；
(3) 工作温度范围：-40℃～+80℃；
(4) 工作频率范围：2.400GHz～2.525GHz；
(5) 发射功率可选择为0dBm、-6dBm、-12dBm和-18dBm；
(6) 数据传输速率支持1Mbps、2Mbps；
(7) 低功耗设计：接收时工作电流12.3mA，0dBm功率发射时11.3mA，掉电模式时仅为900nA；
(8) 增强型“Shock Burst”工作模式，硬件的CRC校验和点对多点的地址控制；
(9) 数据包每次可传输1～32Byte的数据；
(10) 4线SPI通讯端口，通讯速率最高可达8Mbps，适合与各种MCU连接，编程简单；
(11) 可通过软件设置工作频率、通讯地址、传输速率和数据包长度；
(12) MCU可通过IRQ引脚快判断是否完成数据接收和数据发送。
(13) 126个通讯通道，6个数据通道，满足多点通讯和调频需要；
nRF24L01无线模块引脚说明：
(1) VCC脚接电压范围为 1.9V~3.6V之间，不能在这个区间之外，超
过3.6V将会烧毁模块。推荐电压 3.3V左右。
(2) 除电源 VCC 和接地端，其他引脚都可以与5V的单片机的输入输出接口直接相连，不需要再进行电平的转换。
(3) 即使单片机上没有SPI也可以对无线模块进行控制，使用普通单片机输入输出端口模拟SPI可以不用单片机的串口接入，只要普通的单片机I/O口就可以进行，当然串口也可以使用（连接P0口的时候要接上10K的上拉电阻）。
 
图5 无线模块引脚说明
2.1.4 系统显示器的选型与介绍
采用LCD液晶显示器显示，画面好，抗干扰能力强，可以节省软、硬件资源，功耗低，成本也不高。现在字符型液晶显示模块已经是单片机应用设计中最常用的信息显示器件。
表3 1602引脚说明
编号	符号	引脚说明	编号	符号	引脚说明
1	VSS	电源地	9	D2	Date I/O
2	VDD	电源正极	10	D3	Date I/O
3	VL	对比度调整端	11	D4	Date I/O
4	RS	数据/命令选择端	12	D5	Date I/O
5	R/W	读写选择端	13	D6	Date I/O
6	E	使能信号	14	D7	Date I/O
7	D0	Date I/O	15	BLA	背光正极
8	D1	Date I/O	16	BLK	背光负极
LCD1602可以显示2行16个字符，有8位数据总线D0-D7，和RS、R/W、EN三个控制端口[22]。工作电压为5V，并且带有字符对比度调节和背光。
具体引脚说明如表3所示。
LCD1602液晶模块内部的CGROM提前储存了160个不相同的字符点阵和图形，字符包括：英文字母的大写和小写、阿拉伯数字0-9、经常使用的一些符号和日文假名等，每个字符都有它自己的国定代码，例如大写的英文字母“B”的代码是01000002B（42H），显示时1602把地址42H中的字符图形显示出来，我们看到的就是字母“B”。
综合了多方面因素的考虑，选择 LCD1602 显示器作为系统的显示界面。
2.2 系统电路的硬件设计
2.2.1 系统单片机主控电路设计
系统单片机主控电路是整个设计方案的核心，温度数据的处理，报警及温度数据的显示控制以及与无线 收发模块的通信设置均有其完成。本系统单片机控制模块电路由单片机AT89S52及晶振电路、复位电路组成，该部分电路如图6所示。
系统主控电路由单片机、时钟振荡电路与复位电路组成。AT89S52中一个高增益的反相放大器构成内部的振荡器，反相放大器的输入输出引脚分别是XTAL1和XTAL2，这个放大器与片外的陶瓷谐振器或者石英晶体连在一起组成了自激振荡器。外部连接的石英晶体与两个电容接到放大器的反馈回路中组成并联振荡电路。对外接电容的要求并不高，但是电容容量的大小还是比较重要的，有时会会轻微影响到振荡器工作的稳定性、起振的难易程度、振荡频率的高低和系统温度的稳定性。对于石英晶体，电容使用30±l0pF左右的比较合适，如果使用的是陶瓷谐振器，推荐选择40±l0pF。
复位电路采用上电复位与按键复位来实现，S1为复位按键。通电时，电容两端相当于短路，于是RST引脚上为高电平，然后电源通过电阻对电容C1充电，RST端电压慢慢下降，降到一定程度，即为低电平，单片机开始正常工作。当S1被按下后，电容C1迅速放电,使RST引脚为高电平，从而实现复位。当S1弹起后，电源通过10KΩ的电阻对电容C1重新充电，RST引脚端出现复位正脉冲。在运行中，外界干扰等因素可使单片机的程序陷入死循环状态或跑飞。为摆脱困境，可将单片机复位，以重新启动。
 
图6 单片机控制模块电路
2.2.2 系统温度采集部分电路设计
温度采集部分由DALLAS 公司生产的一线式数字温度传感器DS18B20组成。DS18B20是独特的一线接口，CPU只需一根端口线就能与诸多DS18B20通信，简化了分布式温度传感应用，无需外部元件，可用数据总线供电，电压范围为3.0V至5.5V。测量温度范围为-55℃至+125℃，华氏相当于是-67到257华氏度，-10℃至+85℃范围内精度为±0.5℃。可编程的分辨率为9～12位，对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃，可实现高精度测温。
 
图7 系统温度采集部分电路
本设计采用三引脚PR-35封装的DS18B20，其与单片机接口电路的连接方式如图7所示。Vcc接外部+5V电源，GND接地，I/O与单片机的P1.0(T2)引脚相连，同时I/O口通过10K上拉电阻接到+5V。
2.2.3 系统显示电路设计
显示部分采用LCD1602液晶显示模块，液晶板上排列着若干5×7或5×10点阵的字符显示位，每个显示位可显示1个字符，从规格上分为每行8、16、20、24、32、40位，有一行、两行及四行三类。其与单片机的连接电路如图8所示。
 
图8 液晶显示接口电路
1脚和2脚分别为LCD1602地和电源引脚，3脚为背光调节引脚，通过1K电位器接地，背光可通过电位器来调节亮度；4脚、5脚、6脚为液晶片选控制引脚，分别连接到单片机的P1.3、P1.4、P1.5端口，7~14脚为数据接口，与单片机的P0口相连实现数据的传输，15、16脚为液晶的背光控制脚，分别接到电源和地。
2.2.4 系统报警指示电路设计
系统报警指示电路由声光报警两种方式实现，声音报警由单片机控制压电式有源蜂鸣器来实现声音的报警指示，蜂鸣器报警部分电路由PNP三极管9012驱动蜂鸣器来实现，单片机I/O口控制三极管的基极，当单片机的I/O口输出为低电平时，三极管导通，蜂鸣器的正极与电源接通，蜂鸣器通电发出报警声，当单片机I/O口输出高电平时，三极管截止，蜂鸣器停止报警。蜂鸣器报警指示电路如图9所示。
 
图9 蜂鸣器报警指示电路
光源报警由单片机控制LED指示灯来实现，其控制原理为当控制LED的单片机端口赋低电平时，LED点亮，赋高电平时LED熄灭。其应用电路如图10所示。
 
图10 LED报警指示电路
2.2.5 系统按键设置电路设计
按键设置部分采用独立式按键。K1控制报警的开与关，K2是上下限温度调节选择键，按下可分别对温度的上下限进行设定，K3为温度值加1按键，K4为温度减1键，它们分别与单片机的P3.4到P3.7口相连。当某一按键按下时，相应的I/O线变为低电平，这样通过键盘上的高低电平来检测有无按键被按下，从而读入相应的数值。按键设置电路如图11所示。
 
图11 系统按键设置电路
2.3 系统硬件电路的绘制与PCB线路板制作
2.3.1 Protel99SE软件介绍
本文在硬件电路的设计过程中，原理图和PCB的绘制采用Protel99SE软件，Protel99SE是应用于各个操作系统下的EDA设计软件，该软件具有简单易操作的优势。
 
图12 系统主机部分电路原理图
2.3.2 系统原理图绘制与PCB印刷线路板制作
采用Protel99SE软件绘制原理图和PCB的主要步骤如下所述：
(1) 建立系统所需原件库；
(2) 加载所建原件库到工程项目中；
(3) 在原理图页面中放置所需元器件并按照电气性能连接各元件；
(4) 建立原件封装库并加载到工程文件中；
(5) 绘制好电路后进行ERC电气检测，并生成网络表；
(6) 在工程中建立PCB文件，导入生成的网络表；
(7) 按照网络飞线提示绘制PCB，最后完成DRC检测。
按照如上步骤最终完成绘制的主从机电路原理图分别如图12、13所示。
 
图13 系统从机部分电路原理图
3. 系统软件设计
3.1 系统软件编程环境介绍
系统软件设计采用C语言编程，编译环境为Keil。Keil c51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统，和汇编相比，C在功能上、结构性、可读性、可维护性上有明显的优势，因而易学易用。
Keil c51软件提供丰富的库函数和功能强大的集成开发调试工具，全Windows界面。另外重要的一点，只要看一下编译后生成的汇编代码，就会明白keil 51生成目标代码的效率是多么的高，大部分语句能够生成十分紧凑的汇编代码，易于理解[23]。
Keil C51可以完成整套完整的开发流程。软件主要三个方面：一是初始化系统；二是按键检测；三是数据采集、数据处理并进行显示。这三个方面的操作分别在主程序中来进行。程序采用模块化的结构，这样程序结构清楚，易编程和易读性好，也便于调试和修改。
3.2 系统软件实现功能要求
系统软件要实现的功能如下：
(1) 完成从机的温度采集以无线传输及主机的接收处理；
(2) 利用LCD液晶显示屏显示通过无线传输模块接收到的实时温度；
(3) 按键调节功能；要软件实现4个按键的调节功能，第一个按键报警模式选择按键；第二个按键是温度上下限的选择按键；第三个按键是温度上升按钮以1℃步进增加；第四个按键是温度减小键，每按下一次以1℃递减；
(4) 当温度超过设定的温度范围时进行声光报警；分别用黄灯和红灯来区分，发声采用三极管驱动蜂鸣器来实现。
3.3 系统主程序流程图
 
图14 系统主机流程图
系统软件部分实现功能如下：
(1) 温度数据的采集及处理，DS18B20读写时序控制；
(2) 数据的无线传输，nRF24L01与单片机之间SPI通信的模拟实现；
(3) 按键调整及中断函数的实现；
(4) 越限报警和报警方式选择。
主机和从机的系统流程图如图14和图15所示。
3.4 系统温度采集的实现
系统温度采集传感器DS18B20工作过程中的协议如下：
(1) 初始化——(2) ROM操作命令——(3) 存储器操作命令——(4) 处理数据
3.4.1 DS18B20初始化时序
 图15 系统从机流程图
DS18B20时序如图16所示。主机总线发送复位脉冲（最短为480μS，最高时间为960μS的低电平信号），接着再释放总线（置总线为高电平）并进入接收状态。DS18B20在检测到总线的上升沿后等待15—60μS发出器件存在脉冲（低电平持续60—240μS）。初始化程序如下所示：
void DS18B20_reset(void)
{
	bit flag=1;
	while (flag)
	{
		while (flag)
	 	{
 			DQ = 1;
			delay(1);
 			DQ = 0;
 			delay(50); // 550us
 			DQ = 1;    // 
 			delay(6);  // 66us
 			flag = DQ; // presence="0继续下一步"
   		}
		delay(45);    //延时500us
		flag = ~DQ;
	}
	DQ=1;
}                                                                      
               
图16 DS18B20初始化时序图
此初始化程序功能为：检测DS18B20是否存在，如存在，将位地址38H置1；如不存在，将位地址38H清零。
3.4.2 DS18B20写时序
单片机写DS18B20的时序如图17所示，当主机总线从高拉至低电平时就产生写时间隙，DS18B20在检测到下降沿后15μS时开始采样总线上的电平，所以15μS之内应将所需写的位送到总线上，DS18B20再15—60μS间对总线采样，每写一位总时间必须在60—120μS之间完成。若低电平写入的位是0，高电平写入的位是1，连续写时位间的间隙应大于1μS。程序如下所示：
void write_byte(uint8 val)
{
	uint8 i;
	for (i=0; i<8; i++)
	{
		DQ = 1;
		_nop_();
		DQ = 0;
		nops(); //4us
		DQ = val & 0x01;      //最低位移出
		delay(6);           //66us
		val >>= 1;          //右移一位
	}
	DQ = 1;
	delay(1);  
}
 
图17 单片机写DS18B20时序图
3.4.3 读时序
单片机读DS18B20的时序如图18所示，单片机主动产生一个下降沿的启动信号，并维持低电平大于1μS后释放总线，15μS后DS18B20占主动权，DS18B20会将数据按位放在总线上（低位在先，当读取两个字节的温度值时，低字节在先），这时单片机可读取信号，读取一位的时间应在60μS内完成。当需要读取下一位时再产生下降沿启动信号。








图18 单片机读DS18B20时序图
uint8 read_byte(void)
{   uint8 i, value=0;
	for (i=0; i<8; i++)
	{
		DQ=1;
		_nop_();
		value >>= 1;
		DQ = 0;
		nops();   //4us
		DQ = 1;
		nops();   //4us 
		if (DQ)
		value|=0x80;
		delay(6);           //66us
	}
	DQ=1;
	return(value);
}
此程序功能为：读取DS18B20 A/D转换后的温度值，转换后的二进制存入36H、35H单元，默认为12位转换，低8位存入36H单元，高8位存入35H单元（35H单元的高5位均为符号位，所以判断符号只需判断低12位数据的最高位即可）。1表示为零度以下，0表示零度以上，实际有效位为11位。
4. 系统的制作、安装与调试
4.1 主、从机电路的绘制与PCB板的制作
把系统的电路原理图设计好以后。下一步工作就是进行实物制作了，而实物制作的第一步就是对电路进行排版布线；虽然PROTEL99 SE软件有自动布局布线的功能，但是，我还是选择了手动布线。但是我懂得很多问题是只有亲自动手了，才会发现。PCB板制作遇到以下几个方面。
a. 电路原理图的布局
 
图19 主从机系统布局图
在器件布局的过程中应注意以下几点：（1）一个模块及其附属的一些分离元器件应尽量放到一起；（2）不同的电路模块尽量划分清晰，使得在调试过程中多电路的检查能够一目了然；（3）较容易发热的元器件尽量放到电路的边缘，有利于散热。经过考虑，本系统的电路布局如图19所示。
b. 布线
PCB布线的好坏对系统性能有直接的影响，在高频电路表现的尤为突出，所以，在进行电路布线时还需注意以下几点：（1）模拟地和数字地应分开接地，避免数字信号和模拟信号会相互干扰；（2）每一根走线，能短则短，不要为了盲目追求少跳线而绕远路，因为线越短电阻越小，干扰也会越小；（3）电源线和地线尽量从电路板的边缘走线，且电源线尽量画的比一般线宽略粗一些；（4）走线在改变方向时应该走45°角或曲线，避免直角的拐角。
c. 打印与转印
打印时要注意油纸不能折叠，打印的设置必须准确，只留下底层的走线和焊盘。而在转印时首先覆铜板要刷洗干净，以免在转印时油墨不能完全的转印；其次，转印机必须预热到机器发出提示音，这表明，转印机已经准备好转印了；第三，转印机的转印速度档位应放在“正常”档位，板子的类型应放在“印刷板” 档位。第四，在转印时，注意油纸上的走线图必须能够完整的附在覆铜板上，一块板子最好转印两次，确保把油墨完全的转印到覆铜板上。
d. 腐蚀
将油纸上的电路图转印到覆铜板后，接着就要把多余的铜腐蚀掉。不过在刚转印好的时候，首先应检查是否转印完整，若有断线、走线空心的问题，必须用油墨笔将断线补起来，空心的走线填完整。确保转印工序完成后，就可以将电路板放入FeCl3溶液里进行腐蚀了，俗称“烂板”。如果有条件，可以将腐蚀液加热，再放入电路板，这样能够有效的提高腐蚀的速度。
e. 打孔
腐蚀好的板子，在洗净之后就可以打孔了，打孔时尤其要注意孔的大小不能将焊盘的铜箔完全打掉，否则焊接时，焊盘没有铜箔就无法进行焊接了。
最后，打孔完成，用砂纸将毛糙磨平，这样电路图的绘制与PCB板的制作就顺利完成了。
4.2 元件的认识、安装与焊接
PCB板制作好后，接下来就是焊接元件了。在焊接之前，必须对各类元件有一定的熟悉和认识，以免在焊接时发生错焊或者器件损坏不知道而导致后面调试陷入困局的情况。
4.2.1 元件的认识与检测
一些常见元件的认识与检测如下：
a. 色环电阻
在本系统中使用的是五个色环的电阻。此类电阻第一、二两环表示有效数字，第三环表示倍率，与前三环距离较大的第四环表示允许偏差。
b. 电容
电容在这里用到的是瓷片电容和电解电容，其外围上面都有标记，我们只需检测其好坏。在利用万用表检测时要注意如果为电解电容红表笔应接正极，黑表笔接负极。对于2200pF一下的电容用万用表R×10KΩ或R×100KΩ测量，2200pF以上可以用R×1KΩ或R×100KΩ档测量。档次调整好了和表笔接好后，观察万用表指针是否较大的偏转，然后由最大的偏转慢慢的减小至最小值（或零），如果时上述情况则证明该电容有充、放电的功能，为好电容。如果发现万用表指针不偏转说明该电容开路。当万用表指针偏转至最大（阻值为零）说明该电容已击穿。不过，一般对于新电容是不需检测的。
c. 数码管
本系统使用的是从网上购买过来的5寸共阳数码管，而在购买时，厂家只提供了原理管脚图而没有实物管脚图，笔者只好用电源和万用表来测实物的管脚分布。首先用万用表测出两个公共端。接着根据原理图依次用电源点亮A~G，测出管脚。检测时，必须注意给数码管各个接上限流电阻，避免电流直线上升而烧坏数码管。
4.2.2 元件的安装与焊接
a. 元件在安装时，注意事项如下：
(1) 为避免因元器件发热而减弱铜箔对基板的附着力，并防止元器件的裸露部分同印制导线短路，安装时元器件应离开面板约1～2mm；
(2) 装配时，应该先安装那些需要机械固定元器件，在此装置中如稳压管、中心芯片插座；
(3) 各种元器件的安装,应该使它们的标记(用色码或字符标注的数值,精度等)朝上面或易于是辨认的方向，并注意标记的读书方向一致 (从左到右或从上到下)。

 
图20 主机电路板效果图
 
图21 从机电路板效果图
b. 元件在焊接时，应注意以下几个方面：
在元器件焊接之前应该先用纱布将电路板打磨一遍，这样可以将铜箔氧化的部分去除掉，以便于焊接；在焊接过程中还要注意焊锡的量要得当，过多可能造成电路短路，过少有可能造成虚焊；元器件焊完后，给发热量大的元器件装上散热片，这用有利于散热增加系统的稳定；最后可以在板子的四个角上安装四个铜柱，一方面可以增加整个结构的美观，另一方面也可以使避免电路板放在导电体上发生短路的危险。
通过以上步骤，一个完整的电路硬件部分就制作完成了，这时可以再检查一下是否有元器件漏焊、焊错的情况，以确保电路的正确。主从机实物电路板如图20、21所示。
4.3 系统的调试
电路板实物做完以后，接下来的工作就是调试。这是理论指导实践最重要的一步。调试工作需要耐心与恒心。所以在调试过程中必须保持冷静的头脑，较强的电路分析能力，一个系统的调试需要软硬件结合调试。主从机实物正面效果图如图22。在软硬件结合调试的过程中应注意以下问题：
 
图22 主从机实物效果图
(1) 先不要插芯片，要先测量一下各点的电压，尤其是无线模块的电源电压在经过AMS1117-3.3V后是不是3.3V，如果不是要检查电路，不然会烧坏无线模块；
(2) 测试过程中液晶屏幕不亮，经检查是液晶背光调节的问题，接上背光后问题解决；
(3) 在手工焊接调试时还出现了P0口忘记接上拉电阻造成系统显示器工作不正常；
(4) 系统温度测量的准确度。我们将标准温度计和温度控制系统的探头放在一起，选定若干不同温度点，记录下标准温度计的温度和温度控制系统测量显示的温度进行比较；
(5) 设定开启加热温度，改变环境温度，验证检测到的温度超出或者低于设定的温度范围时是否报警及能否通过报警模式选择键选择报警方式。
4.4 系统的测试及功能验证
a. 本系统测量显示温度与标准温度计测量温度对比如表4所示。
表4 温度测量准确度
标准温度计测量温度（℃）	本系统测量显示温度（℃）
20．0	20.1
22.3	22.3
24.5	24.6
35．8	35．7
40.5	40.6
50.8	50.7
表5 系统加热测量
设定温度范围（℃）	环境温度（℃）	报警LED	蜂鸣器	报警模式选择
10---30	-1	绿亮	响	声光报警
10---30	12	全灭	不响	声光报警
10---30	20	全灭	不响	声光报警
10---30	30	全灭	不响	声光报警
10---30	32	红亮	响	声光报警
25---45	20	绿亮	响	声光报警
25---45	25	全灭	不响	声光报警
25---45	30	全灭	不响	声光报警
25---45	45	全灭	不响	声光报警
25---45	48	红亮	响	声光报警
经过表4测量数据的对比，此温度远程监测系统对温度的监测准确度高，达到了设计要求指标。
b.设定不同的温度报警范围，改变周围环境温度，系统报警功能验证情况如表5所示。
红色LED亮表示温度高于设定温度范围，绿色LED亮表示监测到的温度值低于设定温度值，当监测到的温度值不在设定的范围内是音乐报警提示。
经过反复测试，系统温度设定范围为-10～120℃，最小区分度为0.1℃，温度控制的误差≤0.1℃；能够测量并用LCD1602液晶显示屏显示当前实际温度值；通过复位键可以使系统设定温度还原默认值，通过按键可以设定温度报警上下限范围及按键开关音乐报警功能。
5. 总结
本文设计了基于单片机AT89S52的远程温度无线监控系统。系统设计硬件部分包括温度数据的采集、nRF24L01无线传输单元、AT89S52控制单元，人机交互单元、和温度上下限及报警模式设置单元、报警指示单元、系统电源单元七个部分组成。
通过硬件实物的制作，软件的编程调试，实现了对环境温度的无线监测及控制，具有如下特点：
(1) 采用数字输出型温度传感器DS18B20采集温度数据，不仅降低了设计成本简化了设计电路而且系统工作稳定、可靠性高；
(2). 采用nRF24L01无线数据传输模块实现主从机间的温度数据传输，数据传输有效距离远，系统抗干扰效果好；
(3). 智能降温设备采用继电器控制电风扇的模式，符合工业控制中对参数的要求；
(4). 系统报警提示采用声光报警同时进行的方式，采用此方式解决了仅有光线报警模式所带来的视觉疲劳问题；
(5). 声音报警采用音乐报警方式代替传统的鸣笛式报警，更具人性化，同时降低了噪音污染。
参考文献
[1] 李朝青.单片机原理及接口技术[M]．北京：北京航空航天大学出版社，2005:36-49.
[2] 康华光.电子技术基础模拟部分(第五版) [M]．北京：高等教育出版社, 2005:32-36.
[3] 阎石.数字电子技术基础（第四版）［M］．北京：高等教育出版社，2005:101-123.
[4] 徐飞,邹逢兴.基于现场总线的通用工业控制器的设计与实现[J].工业控制计算机2001,(14):1233-1876.
[5] 王连玉.基于32位嵌入式MCU的通用开发平台的设计与实现[D].南开大学学位论文,2010.
[6] 王晓飞,封吉平,王向东基于USB总线电源控制卡的设计[J].仪表术,2009,(11):1066-2394.
[7] 白延敏.51单片机典型系统开发实例精讲[M]．北京：电子工业出版社，2009:100-130.
[8] 钱军.网络型中央控制系统的设计[D].大连理工大学学位论文,2006.
[9] 胡爱军,张瑞卿,王聪.基于ARM9&Linux的AD转换的实现[J],机械设计与制造,2011,（6）:1001-3997.
[10] 张毅刚.MCS-51实用汇编子程序设计[M].哈尔滨.哈尔滨工业大学出版社,2003:18-26.
[11] 李军.51系列单片机高级实例开发指南[M].北京:北京航空航天大学出版社,2004:85-102.
[12] 张齐,杜群贵.单片机应用系统设计技术[M]. 北京：电子工业出版社，2007:44-66.
[13] 杨金岩.8051单片机数据传输接口扩展技术与应用实例[M]．北京：人民邮电出版社，2005:28-44.
[14] 赖彪,金海鹰,贾惠芹.USB_RS232转换卡的设计与实现[J].现代电子计术.2011(34): 1004-3731.
[15] 李欣.LED显示屏显示与控制原理[J].科学与财富.2011,(46):2336-2458.
[16] 求是科技.单片机通信技术与工程实践[M]．北京：人民邮电出版社，2005:79-96.
[17] 郭永贞.数字电子技术[M]. 西安电子科技大学出版社，2000:56-76.
[18] 李广弟.单片机基础[M].北京：北京航空航天大学出版社,2001:88-94.
[19] 张洪润.电子线路与电子技术[M].清华大学出版社[M]，2005:210-243.
[20] 张齐，杜群贵.单片机应用系统设计技术[M].电子工业出版社，2004:43-47.
[21] 孙凯.分布式温室智能控制系统[J].江苏：科学大众，2006，20(4).
[22] Schubert, E.F. Light Emitting Diodes. Cambidge, England[M]: Cambidge University Press,2003:87-112.
[23] Xingrui Liu, Guohong Gao. Temperature Monitoring System Based on AT89C51 [J]. Berlin Heidelberg: Springer-Verlag,2011,105(1): 601-605.
 
附录  程序代码
#include<regx51.h>
#include "main.h"
#include "wireless.h"
#include "LCD1602.h"
#include "buzz.h"
#include "word.h"
uint32 Count=0;
uint8 Rev_dat[16], Tl=0;
int8 k_val=0,Top=30, Low=10;
uint8 flag;
void delay(uint16 n)
{
	while (n--);
}
void delay_ms(uint16 m)
{
    uint16 n;
	for (; m>0; m--)
		for (n=125; n>0; n--);
}
uint8 scan_key(void)
{
	uint8 val=0;
	if (Key1 == 0)
	{
		delay_ms(KEY_DELAY);
		if (Key1 == 0)
		while (Key1 == 0);
	}
	if (Key2 == 0)
	{
		delay_ms(KEY_DELAY);
		if (Key2 == 0)
		{	flag = 0;
			val = K_TL;
			if (Tl == 0) // 上下限切换
				w_string(0x4A, " ");
			else
			w_string(0x43, " ");
		}
		while (Key2 == 0);
	}
	if (Key3 == 0)
	{
		delay_ms(KEY_DELAY);
		if (Key3 == 0)
		val = K_ADD;
		while (Key3 == 0);
	}
	if (Key4 == 0)
	{
		delay_ms(KEY_DELAY);
		if (Key4 == 0)
		val = K_SUB;
		while (Key4 == 0);
	}
	return val;
}
void key_action(uint8 val)
{
	int8 tmp;
	switch (val)
	{
		case K_TL:
			if (Tl >= 1) // 上下限值加
				Tl = 0;
			else
				Tl++;
			if (Tl == 0)
				w_string(0x43, "T"); //显示上限标志
			else
				w_string(0x4A, "L"); //显示下限标志
			break;
		case K_ADD:
			if (Tl == 0)
			{
				if (Top <= 50) // 上下限值减
					Top++;
				if (Top < 0)
				{
					tmp = -Top;
					w_string(0x45, "-");//显示负号
					w_data(0x46, tmp);//显示数值
				}
				else
				{
					w_string(0x45, "+");//显示正号
					w_data(0x46, Top);//显示数值
				}
			}
			else
			{
				if (Low < Top)
					Low++;
				if (Low < 0)
				{
					tmp = -Low;
					w_string(0x4C, "-");//显示负号
					w_data(0x4D, tmp);//显示数值
				}
				else
				{
					w_string(0x4C, "+");//显示正号
					w_data(0x4D, Low);//显示数值
				}
			}
			break;
		case K_SUB:
			if (Tl == 0)
			{
				if (Top > Low)
					Top--;
				if (Top < 0)
				{
					tmp = -Top;
					w_string(0x45, "-");//显示负号
					w_data(0x46, tmp);//显示数值
				}
				else
				{
					w_string(0x45, "+");//显示正号
					w_data(0x46, Top);//显示数值
				}
			}
			else
			{
				if (Low >= -30)
					Low--;
				if (Low < 0)
				{
					tmp = -Low;
					w_string(0x4C, "-");//显示负号
					w_data(0x4D, tmp);//显示数值
				}
				else
				{
					w_string(0x4C, "+");//显示正号
					w_data(0x4D, Low);//显示数值
				}
			}
			break;
		default: break;
	}
}
main()
{
	uint8 k_val, tra[2];
	delay_ms(500); // 上电延时
	InitialSound();//初始化声音定时器
	LCD1602_init(); // LCD初始化
	w_string(0x00, "   No signal!   "); // LCD显示
	w_string(0x41, " T:+30C L:+10C"); // LCD显示
	wireless_init();
	while (1)
	{	flag=0;
		Count++; 
		if (Count >= 140000)
			w_string(0x00, "   No signal!   "); //显示无信号
		if (k_val == 0) // 判断是否按键
			k_val = scan_key(); //扫描按键
		if (k_val)
		{
			key_action(k_val); //按键操作内容
			k_val = 0;
		}
		if 	(IRQ == 0) //是否接收到数据
		{
			read_chip_state();//读芯片状态
			tra[0] = 0x27;
			tra[1] = 0x70;
			write_more_byte(tra,2);
			read_more_bytes(Rev_dat,16); // 读数据
			if ((Rev_dat[0]+Rev_dat[1]) == 0xFF) //和校验
			{
				Count = 0; //清零计数器
				w_string(0x03, "wendu:   . C");	 //显示当前温度
				if (Rev_dat[0] < 0) //负温度显示
				{
					Rev_dat[0] = -Rev_dat[0];
					w_string(0x09, "-");
					w_data(0x0a, Rev_dat[0]);
				}
				else // 正温度显示
				{
					w_string(0x09, "+");
					w_data(0x0a, Rev_dat[0]);
				}
				if ((Rev_dat[0] > Top)&&(flag == 0))
				 {	
				    LED1 = 0;		
					flag = 1;
				    Play(Music_Girl,0,3,360);//播放报警音乐	
					}
				else if ((Rev_dat[0] < Low)&&(flag == 0))
				  {
				    LED2 = 0;
					flag = 1;
					Play(Music_Girl,0,3,360);//播放报警音乐
					}
				else // 当前温度在正常范围
				  {
					LED1 = 1;
					LED2 = 1;
					//flag=0;
			 	  }
		     }
	    }
     }
  }
 
致    谢
该论文的撰写是在我的导师刘琪的精心指导和悉心关怀下完成的，从论文的选题、研究、撰写到定稿，都得到了刘琪老师细心指导。刘琪老师待人宽厚，对学生关心有加，在工作上更是精益求精，对学生要求严格，鼓励学生敢于实践，学以致用，积极创新，从而在实践操作中发现存在的问题从而解决问题。刘琪老师的科研经验十分丰富与同时又具有较高的理论水平，其学术思想的开明、朴实的作风和对科学研究及发展趋势的深刻认识给我以极大的影响、启迪和熏陶，令我受益匪浅。该设计及论文的圆满完成是和刘琪老师的细心关怀分不开的。
在系统的设计和论文的研究工作中无不倾注着各位老师的心血和辛勤的汗水，刘伟老师严谨的治学态度、渊博的知识、生动而满富激情的授课方式，让我学到了扎实的理论知识；实验室老师丰富的实践能力和无私的奉献精神培养了我较强的动手能力，在系统的设计和论文的撰写过程中，郭荣艳老师给予了细心的指导。从各位尊敬的老师身上，我不仅学到了扎实的专业知识和丰富的实践技能，也学到了很多做人的道理。在此，向给予我指导和帮助的各位老师致以最衷心的感谢和深深的敬意！
在系统研制、开发及论文撰写的过程中，我得到了物理与电子工程系张晓辉、张楠楠等同学的大力支持和帮助，在此深表谢意！
在这四年多的学习和研究工作中，也得到了物理与电子工程系的许多老师及同学和师兄弟们的关心和热心帮助，在此向他们表示由衷的感谢！
最后，衷心感谢在百忙中评阅论文和参加答辩的各位专家、教授和同学!

